package com.group01.result;

import com.group01.enums.CodeAndMessageEnum;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

/**
 * @Description RestFul统一返回结果封装
 * @Author 翟玉龙
 * @Date 2024/6/15
 */
@AllArgsConstructor  // 全参构造
@NoArgsConstructor   // 无参构造
@Data
public class Result<T>{

    private Integer code; // 定义返回状态码

    private String message; // 定义返回消息

    private T data; // 定义返回数据,泛型


    /**
     * 成功返回构造
     * @param message 返回消息
     * @param data 返回数据
     * @return Result
     * @param <E> 泛型
     */
    public static <E> Result <E> success(String message , E data) {
        return new Result<>(CodeAndMessageEnum.SUCCESS.getCode(), message , data);
    }

    /**
     * 成功返回构造
     * @param e 枚举
     * @param data 返回数据
     * @return Result
     * @param <E> 泛型
     */
    public static <E> Result <E> success(CodeAndMessageEnum e , E data) {
        return new Result<>(e.getCode(), e.getMessage() , data);
    }

    /**
     * 成功返回构造
     * @param e 枚举
     * @return 空数据返回
     */
    public static Result <String> success(CodeAndMessageEnum e ) {
        return new Result<>(e.getCode(), e.getMessage() , "");
    }

    /**
     * 失败构造返回
     * @param message 返回消息
     * @return Result
     */
    public static Result <String> error(String message) {
        return new Result<>(CodeAndMessageEnum.ERROR.getCode(), message , "");
    }

    /**
     * 失败构造返回
     * @param message 返回消息
     * @return Result
     */
    public static <E> Result <E> error(String message , E data) {
        return new Result<>(CodeAndMessageEnum.ERROR.getCode(), message , data);
    }

    /**
     * 失败构造返回
     * @param code 响应码
     * @param message 返回消息
     * @return Result
     */
    public static Result <String> error(Integer code , String message) {
        return new Result<>(code , message , "");
    }

    /**
     * 失败构造返回
     * @param code 枚举类
     * @return Result
     */
    public static Result <String> error(CodeAndMessageEnum code) {
        return new Result<>(code.getCode() , code.getMessage() , "");
    }

    /**
     * 失败构造返回
     * @param code 枚举类
     * @return Result
     */
    public static <E> Result <E> error(CodeAndMessageEnum code, E data) {
        return new Result<>(code.getCode() , code.getMessage() , data);
    }
}
